#ifndef GRAPHICSOBJECT_H
#define GRAPHICSOBJECT_H

/* 
 GraphicsObject.h
 
 This class creates an object to manage graphical objects
 The actual graphical object has not been implemented yet.
 */


#include "BaseEntity.h"
#include "CustomDataTypes.h"
#include "HelperFunctions.h"
#include <iostream>

using std::cout;

class GraphicsObject: public BaseEntity
{
    
private:
    
    //Store position of the game object
    Position3D mObjectPos;
    
    //Store rotation of the game object;
    Rotation3D mObjectRot;
    
    //Store the scale of the game object;
    Scale3D mObjectScl;
    
    //Store type of object
    ObjectType mObjType;
    
    
public:
    
    //Constructors
    GraphicsObject(int id);
    GraphicsObject(int id, double xPos, double yPos, double zPos);
    GraphicsObject(int id, ObjectType objType, double xPos, double yPos, double zPos);
    GraphicsObject(int id, ObjectType objType, double xPos, double yPos, double zPos, double xRot, double yRot, double zRot);
    GraphicsObject(int id, ObjectType objType, double xPos, double yPos, double zPos, double xRot, double yRot, double zRot, double xScl, double yScl, double zScl);
    
    //Update function
    void Update();
    
    //Setters for object position
    void setObjectPosition(double xPos, double yPos, double zPos);
    void setObjectPosition(Position3D position);
    
    //Setters for object rotation
    void setObjectRotation(double xRot, double yRot, double zRot);
    void setObjectRotation(Rotation3D rotation);
    
    //Setters for object scale
    void setObjectScale(double xScl, double yScl, double zScl);
    void setObjectScale(Scale3D scale);
    
    //Getters for object position
    Position3D getObjectPosition();
    double getObjectPositionX();
    double getObjectPositionY();
    double getObjectPositionZ();
    
    //Getters for object rotation
    Rotation3D getObjectRotation();
    double getObjectRotationX();
    double getObjectRotationY();
    double getObjectRotationZ();
    
    //Getters for object scale
    Scale3D getObjectScale();
    double getObjectScaleX();
    double getObjectScaleY();
    double getObjectScaleZ();
    
    //Getter and Setter for object type
    void setObjectType(ObjectType objType);
    ObjectType getObjectType();

    static void drawObject(ObjectType objType);
};

#endif